/**
 * 
 */
package ar.com.contable.ganancias.modelVO;

import java.util.ArrayList;
import java.util.List;

import ar.com.contable.ganancias.model.CategoryStrutModel;
import ar.com.contable.ganancias.model.ItemStrutModel;
import ar.com.contable.ganancias.model.ItemValueModel;
import ar.com.contable.ganancias.model.MonthModel;
import ar.com.contable.ganancias.model.YearFolderModel;
import ar.com.contable.ganancias.rule.RuleTotals;
import ar.com.contable.ganancias.util.Consts;

/**
 * @author E420611
 *
 */
public class VOFactory {

	/**
	 * Get new Instance of PersonFolder.
	 * @param surname
	 * @param name
	 * @return
	 */
	static public YearModelVO createInstance(String surname, String name){
		YearFolderModel yearFolderModel = createStrutInstanceYearFolderModel(surname, name);
		YearModelVO personFolderVO = new YearModelVO(yearFolderModel);
		
		List<CategoryStrutModel> categoryModels = yearFolderModel.getCategories();
		for (CategoryStrutModel categoryStrutModel : categoryModels) {
			CategoryVO cateTemp = new CategoryVO(personFolderVO, categoryStrutModel);
			List<ItemStrutModel> items = categoryStrutModel.getItems();
			for (ItemStrutModel itemStrutModel : items) {
				ItemValueModel[] itemValues = new ItemValueModel[12];
				MonthModel[] months = yearFolderModel.getMonths();
				for (int i = 0; i < 12; i++) {
					itemValues[i] = months[i].getValues().get(itemStrutModel.getNameCode());
				}
				ItemVO itemTemp = new ItemVO(cateTemp, itemValues);
				cateTemp.getRows().add(itemTemp);
			}	
			personFolderVO.getCategories().add(cateTemp);
		}
		
		//add rules
		RuleTotals r1 = new RuleTotals();
		r1.setModel(yearFolderModel);
		
		yearFolderModel.getRules().add(r1);		
		
		personFolderVO.setModel(yearFolderModel);
		
		return personFolderVO;
	}
	
	/**
	 * Get new Instance of model.
	 * @param surname
	 * @param name
	 * @return
	 */
	static public YearFolderModel createStrutInstanceYearFolderModel(String surname, String name){
		YearFolderModel model =  new YearFolderModel(surname, name);
		
		//add strut
		model.getCategories().addAll(createInstanceStrut());
		
		
		MonthModel[] months = model.getMonths();		
//		ArrayList<ItemStrutModel> items = new ArrayList<ItemStrutModel>();
		List<CategoryStrutModel> categories = model.getCategories();
		for (CategoryStrutModel categoryStrutModel : categories) {
			for (ItemStrutModel itemStrutModel : categoryStrutModel.getItems()) {
				for (MonthModel monthModel : months) {
					ItemValueModel itemValueModel = new ItemValueModel(categoryStrutModel, itemStrutModel.getNameCode());
					monthModel.getValues().put(itemStrutModel.getNameCode(), itemValueModel);
				}
			}
		}

		return model;
	}
		
	/**
	 * Get new Instance of model.
	 * @param surname
	 * @param name
	 * @return
	 */
	static public List<CategoryStrutModel> createInstanceStrut(){
		
		CategoryStrutModel cate1 = new CategoryStrutModel(Consts.GANANCIAS_BRUTAS);
		ItemStrutModel item11 = new ItemStrutModel(Consts.SUELDO_BRUTO, false);
		ItemStrutModel item12 = new ItemStrutModel(Consts.PLUS_VACACIONES, false);
		ItemStrutModel item13 = new ItemStrutModel(Consts.BONIFICACIONES_Y_PREMIOS, false);
		ItemStrutModel item14 = new ItemStrutModel(Consts.PRIMER_AGUINALDO, false);
		ItemStrutModel item15 = new ItemStrutModel(Consts.SEGUNDO_AGUINALDO, false);
		ItemStrutModel item16 = new ItemStrutModel(Consts.TOTAL_GANANCIAS_BRUTAS, true);		
		cate1.getItems().add(item11);
		cate1.getItems().add(item12);
		cate1.getItems().add(item13);
		cate1.getItems().add(item14);
		cate1.getItems().add(item15);
		cate1.getItems().add(item16);
		
		CategoryStrutModel cate2 = new CategoryStrutModel(Consts.DEDUCCIONES_ADMITIDAS);
		ItemStrutModel item21 = new ItemStrutModel(Consts.INTERESES_DE_DEUDA_QUE_ORIGINAN_LA_GANANCIA, false);
		ItemStrutModel item22 = new ItemStrutModel(Consts.INTERESES_DE_CREDITOS_HIPOTECARIOS, false);
		ItemStrutModel item23 = new ItemStrutModel(Consts.SERVICIO_DOMESTICO, false);
		ItemStrutModel item24 = new ItemStrutModel(Consts.PRIMAS_DE_SEGUROS_DE_VIDA, false);
		ItemStrutModel item25 = new ItemStrutModel(Consts.GASTOS_DE_SEPELIO, false);
		ItemStrutModel item26 = new ItemStrutModel(Consts.APORTES_JUBILATORIOS, true);	
		ItemStrutModel item27 = new ItemStrutModel(Consts.APORTES_OBRASOCIAL, false);
		ItemStrutModel item28 = new ItemStrutModel(Consts.APORTES_INSSJYP, false);
		ItemStrutModel item29 = new ItemStrutModel(Consts.APORTES_SINDICALES, false);
		ItemStrutModel item201 = new ItemStrutModel(Consts.TOTAL_DEDUCCIONES_ADMITIDAS, false);
		ItemStrutModel item202 = new ItemStrutModel(Consts.DEDUCCIONES_ADMITIDAS, true);			

		cate2.getItems().add(item21);
		cate2.getItems().add(item22);
		cate2.getItems().add(item23);
		cate2.getItems().add(item24);
		cate2.getItems().add(item25);
		cate2.getItems().add(item26);
		cate2.getItems().add(item27);
		cate2.getItems().add(item28);
		cate2.getItems().add(item29);
		cate2.getItems().add(item201);
		cate2.getItems().add(item202);
		
		CategoryStrutModel cate3 = new CategoryStrutModel(Consts.DEDUCCIONES_GENERALES);
		ItemStrutModel item31 = new ItemStrutModel(Consts.IMPUESTOS_Y_TASAS, false);
		ItemStrutModel item32 = new ItemStrutModel(Consts.PRIMAS_DE_SEGUROS, false);
		ItemStrutModel item33 = new ItemStrutModel(Consts.PERDIDAS_EXTRAODINARIAS, false);
		ItemStrutModel item34 = new ItemStrutModel(Consts.PERDIDAS_COMPROBADAS, false);
		ItemStrutModel item35 = new ItemStrutModel(Consts.GASTOS_DE_MOVILIDAD_Y_VIATICOS, false);
		ItemStrutModel item36 = new ItemStrutModel(Consts.AMORTIZACIONES_DE_AUTOMOVILES, true);	
		ItemStrutModel item37 = new ItemStrutModel(Consts.GASTOS_DE_COMBUSTIBLE_PATENTES_REPARACIONES, false);
		ItemStrutModel item38 = new ItemStrutModel(Consts.DEDUCCIONES_GENERALES, false);
		cate3.getItems().add(item31);
		cate3.getItems().add(item32);
		cate3.getItems().add(item33);
		cate3.getItems().add(item34);
		cate3.getItems().add(item35);
		cate3.getItems().add(item36);
		cate3.getItems().add(item37);
		cate3.getItems().add(item38);
		
		CategoryStrutModel cate4 = new CategoryStrutModel(Consts.QUEBRANTOS_ESPECIFICOS);
		CategoryStrutModel cate5 = new CategoryStrutModel(Consts.RESULTADO_NETO);
		CategoryStrutModel cate6 = new CategoryStrutModel(Consts.DEDUCCIONES_ESPECIALES);
		CategoryStrutModel cate7 = new CategoryStrutModel(Consts.ALICUOTA__ART_90);
		CategoryStrutModel cate8 = new CategoryStrutModel(Consts.IMPUESTO_DETERMINADO);
		CategoryStrutModel cate9 = new CategoryStrutModel(Consts.MONTOS_COMPUTABLES);
		CategoryStrutModel cate10 = new CategoryStrutModel(Consts.IMPUESTO_A_INGRESAR);
		CategoryStrutModel cate11 = new CategoryStrutModel(Consts.QUEBRANTOS_ESPECIFICOS);		
		

		List<CategoryStrutModel> temp = new ArrayList<CategoryStrutModel>();
		temp.add(cate1);
		temp.add(cate2);
		temp.add(cate3);
		temp.add(cate4);
		temp.add(cate5);
		temp.add(cate6);
		temp.add(cate7);
		temp.add(cate8);
		temp.add(cate9);
		temp.add(cate10);
		temp.add(cate11);
				
		
		return temp;
	}	
	
//	/**
//	 * Create new category.
//	 */
//	static void newCategory(PersonFolderVO pf, String categoryName){
//		pf.getCategories().add(new CategoryVO(categoryName));		
//	}
}
